本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 儲存格對齊方式【Python 處理 Excel #22】
這篇文章介紹如何使用 Python 的 openpyxl 調整 Excel 儲存格的對齊方式。
這篇文章使用到的 Excel 工作表內容如下:
order_id | total_amount | note |
---|---|---|
0001 | 10500 | 如果有問題請聯繫手機:0912-345-678。 |
0002 | 3000 | 請於10月17日之前送達。包裝上不需要附贈發票。 |
0003 | 1000 | 不熟悉產品安裝方式,需要上門安裝服務。 |
下方的程式碼介紹在 openpyxl 中如何調整 Excel 儲存格的對齊方式:
from openpyxl.styles import Alignment
def set_alignment(ws):
"""
對工作表中的每個儲存格套用對齊方式。
Args:
ws (Worksheet): openpyxl 的 Worksheet 物件。
"""
alignment = Alignment(horizontal='left', vertical='center', indent=0)
for row in ws.iter_rows():
for cell in row:
cell.alignment = alignment
# 使用函數
set_alignment(ws)
set_alignment
函數對工作表中的每個儲存格設置朝左和垂直居中的對齊方式,其中 Alignment
類別用於設定儲存格的對齊方式。
'left'
,表示文字靠左對齊。'center'
,表示文字在儲存格中垂直置中。0
,表示無縮排。Alignment 類別提供了多種參數控制儲存格內容的對齊方式。
from openpyxl.styles import Alignment
alignment = Alignment(horizontal='left', vertical='center', text_rotation=0, wrap_text=True, shrink_to_fit=False, indent=0)
'general'
、'left'
、'center'
、'right'
、'fill'
、'distributed'
等。'top'
、'center'
、'bottom'
、'justify'
和 'distributed'
。True
或 False
。True
或 False
。以下方法可以針對單個儲存格設定對齊方式:
from openpyxl.styles import Alignment
alignment = Alignment(horizontal='left', vertical='center')
cell = ws['A1']
cell.alignment = alignment
或是
from openpyxl.styles import Alignment
cell = ws['A1']
cell.alignment = Alignment(horizontal='center', vertical='center')
如果需要為多個儲存格設定相同的對齊方式,可以建立一個 Alignment 對象並重複使用:
from openpyxl.styles import Alignment
centered = Alignment(horizontal='center', vertical='center')
for row in ws['A1:C5']:
for cell in row:
cell.alignment = centered
這樣就可以對多個儲存格設定相同的對齊方式。
如果儲存格內容太長,可以透過 Excel 的自動換列讓文字隨著儲存格的寬度自動換列,這樣的功能對應到 openpyxl 的 Alignment
是透過 wrap_text
參數決定是否自動換列。
例如在這篇文章中,希望對 note
欄位開啟自動換列功能,以下是開始自動換列的程式碼:
def enable_wrap_text(ws, column_headers):
"""
對指定的欄位啟用自動換列功能。
Args:
ws (Worksheet): openpyxl 的 Worksheet 物件。
column_headers (list): 需要啟用自動換列功能的欄位名稱列表。
"""
wrap_alignment = Alignment(horizontal='left', vertical='center', indent=0, wrap_text=True)
for col in range(1, ws.max_column + 1):
header = ws.cell(row=1, column=col).value
if header in column_headers:
for row in range(1, ws.max_row + 1):
cell = ws.cell(row=row, column=col)
cell.alignment = wrap_alignment
# 使用函數
enable_wrap_text(ws, ['note'])
enable_wrap_text
函數讓使用者可以透過傳入欄位名稱列表設定需要自動換列的欄位。因為是透過儲存格的 alignment
屬性決定是否自動換列,所以通常我會在前面的 set_alignment
函數執行過後才使用 enable_wrap_text
函數,也就是先設定完整體的對齊方式,再針對需要自動換列的欄位進行調整。
如果想要嘗試使用 openpyxl 調整儲存格的對齊方式,可以使用以下程式碼測試:
from openpyxl import Workbook
from openpyxl.styles import Alignment
def create_sample_excel():
"""
建立一個 demo 的 Excel 檔案並調整欄寬與設定對齊方式。
"""
# 建立 Workbook
wb = Workbook()
ws = wb.active
ws.title = 'demo'
# 增加欄位名稱與資料
headers = ['order_id', 'total_amount', 'note']
data = [
['0001', 10500, '如果有問題請聯繫手機:0912-345-678。'],
['0002', 3000, '請於10月17日之前送達。包裝上不需要附贈發票。'],
['0003', 1000, '不熟悉產品安裝方式,需要上門安裝服務。']
]
ws.append(headers)
for row in data:
ws.append(row)
# 設定對齊方式
set_alignment(ws)
# 啟用自動換列
enable_wrap_text(ws, ['note'])
# 儲存活頁簿
wb.save('output.xlsx')
# 執行案例
if __name__ == "__main__":
create_sample_excel()
Alignment
類別提供多種選項控制儲存格內容的對齊和顯示方式,包括水平和垂直對齊、自動換列等。Alignment
的 wrap_text
參數可以達到 Excel 儲存格自動換列的效果。本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 儲存格對齊方式【Python 處理 Excel #22】